<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>匿名函数与函数提升</title>
</head>
<body>
    
</body>
<script>
    /*
        匿名函数 -- 就是不写函数名的函数  由函数的名称的叫具名函数
            function关键字后面跟的名字叫做匿名函数
                使用场景：   匿名函数经常是用在一些异步的回调函数中  例如数组的map，reduce，filter方法中  处理一些异步操作

        函数提升：  JS在解析代码前会将特殊的语句提前解析  function就是典型的会提升
    */

    name()  //Cannot access 'name' before initialization  意思是使用前还未定义
    /*
        可见  匿名函数是没有函数提升的
    */
    let name = function(){  // 匿名函数
        console.log('jimmy')
    }  

    /*
        由一下的例子我们可以得出 虽然JS的代码执行顺序是从上到下  按道理执行到 names() 的时候，函数应该还没有被解析到会报错  实际上没有
            原因是JS在解析的时候会先解析functin的代码  也就相当于会把带有function的代码移动到最前面先执行
                则个在JS中就被叫做函数提升
                    这个只有具名函数是有的特性  匿名函数是没有的
    */
    names() //xuexue
    function names(){  //具名函数
        console.log('xuexue')  
    }
</script>
</html>